class Solution:
    def sumGame(self, num: str) -> bool:
        val1, val2 = 0, 0
        num1, num2 = 0, 0

        mid = len(num) // 2
        for i in range(len(num)):
            if i < mid:
                if num[i] == "?":
                    num1 += 1
                else:
                    val1 += int(num[i])
            else:
                if num[i] == "?":
                    num2 += 1
                else:
                    val2 += int(num[i])

        # print(val1, num1)
        # print(val2, num2)

        # 确保第一部分的问号数量小于等于第二部分
        if num1 > num2:
            val1, val2, num1, num2 = val2, val1, num2, num1

        # 不同考虑将两个部分的共同问号数量
        val2 -= val1
        num2 -= num1

        # 当最后为Bob后手时，Alice需要考虑策略
        if num2 % 2 == 0:
            # Alice直接让第二部分超过第一部分，使Bob必败
            if (-val2) < (num2 // 2) * 9:
                return True
            # Alice让Bob即使再补一个9也无法达到，使Bob必败
            if (-val2) > (num2 // 2) * 9:
                return True
            return False

        # 当最后为Alice后手时，Alice不会输
        else:  # num2 % 2 == 1
            return True


if __name__ == "__main__":
    print(Solution().sumGame(num="5023"))  # False
    print(Solution().sumGame(num="25??"))  # True
    print(Solution().sumGame(num="?3295???"))  # False
